import java.util.Scanner;

/**
 * 16. 路径
 * https://www.lanqiao.cn/problems/1460/learning/?page=1&first_category_id=1&second_category_id=3&tag_relation=intersection&tags=2021,%E7%9C%81%E8%B5%9B&sort=pass_rate&asc=0
 */
public class Main19 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = 2022;
        // dp[i]: 表示 1~i位置的最短路径
        int[] dp = new int[n]; //下标从1开始
        // 初始化
        dp[1] = 0;
        for(int i = 2;i <= 2021;i++) {
            // 获取最小值，里面开始为最大值
            dp[i] = Integer.MAX_VALUE;
        }
        for(int i = 1;i < n;i++) {
            for(int j = i + 1;j < n && (j - i) <= 21;j++) {
                // dp的公式就是，min(当前的最短路径和，前一个点(i位置)到该点的路径总和 + 前一个点的最短路径)
                dp[j] = Math.min(dp[j],le(i,j) + dp[i]);
            }
        }
        System.out.println(dp[2021]);
        scan.close();
    }

    // 求最大公约数
    public static int gcd(int a,int b) {
        return b != 0 ? gcd(b,a % b) : a;
    }

    // 求最小公倍数
    public static int le(int a,int b) {
        return a * b / gcd(a,b);
    }
}
